web workerのpromise wrapper
事前調査
いくつかあった
どれもwrap(new Worker("..."))の形でWebWorkerを外部から注入するスタイルをとっていた Nodeやservice workerにも対応できるようにする為だろうか
takker.iconが欲しい機能
他のworkerやpostMessageを実装したobjectは考慮しない
複数のworkerに処理を分散させて計算する
workerを使い回す
一つのworker sourceに複数の関数をまとめる
通信時にidを付与して、どの関数呼び出しのタスクかを判別する
これら全てを満たせるlibraryが見つからなそうだったので、自分で作ることにした
使い方(予定)
code:ts
import type {
DoHeavyWorkType, FizzSearchType
const {
doHeavyWork,
fizzSearch,
} = thread<DoHeavyWorkType, FizzSearchType>("https://...", {type: "module"}); console.log(await doHeavyWork(456));
let count = 0;
const matches = [] as string[];
for await (const results of fizzSearch("hello")) {
count += results.length;
console.log(${count} lines have been found. Searching...);
matches.push(...results);
}
console.log(Found ${count} lines. Results:, matches);